<?php

declare(strict_types=1);
/**
 * This file is part of habo_new_media.
 *
 * @link     https://www.berlen.cn/
 * @contact  tech@berlen.cn
 * @license  http://gitlab.rehou.cn/habo/habo_new_media/-/blob/master/README.md
 */
namespace app\enum;

class TokenEnum
{
    /**
     * @var int token有效状态
     */
    public const TOKEN_STATUS_OK = 1;

    /**
     * @var int token失效状态
     */
    public const TOKEN_STATUS_FAIL = 2;

    /**
     * @var string redis 账户和token关系 token:advertiser:账户id
     */
    public const TOKEN_ADV_REDIS_KEY = 'token:advertiser:';

    /**
     * @var int 设置更新token时过期剩余时间
     */
    public const LAST_EXPIRE_TIME = 3600;

    /**
     * @var string redis token桶执行队列
     */
    public const TOKEN_REDIS_EXECUTE_KEY_ARR = [
        CommonEnum::OE_MEDIA => 'token:barrel:oe',
        CommonEnum::KS_MEDIA => 'token:barrel:ks',
        CommonEnum::QQ_MEDIA => 'token:barrel:qq',
        CommonEnum::KS_ESP_MEDIA => 'token:barrel:ksesp',
    ];

    /**
     * @var string redis 广点通 token桶执行队列
     */
    public const QQ_TOKEN_REDIS_EXECUTE_KEY = 'token:barrel:qq';

    /**
     * @var string redis token桶key前置 token:barrel:媒体id:tokenid
     */
    public const TOKEN_REDIS_KEY = 'token:barrel:%d:%d';

    /**
     * @var string redis token桶内每秒token数量
     */
    public const TOKEN_REDIS_NUM = 800;

    /**
     * @var string redis token桶内 脚本数量
     */
    public const TOKEN_REDIS_TASK_NUM = 5;

    /**
     * @var string redis token桶内每次缓存的时间
     */
    public const TOKEN_REDIS_TIME = 360;   // 360秒  六分钟

    /**
     * @var string redis token桶内每次缓存存在的时间
     */
    public const TOKEN_REDIS_EXPIRE_TIME = 3600;   // 3600秒  1小时

    /**
     * @var string 快手redis起始key
     */
    public const KS_LIMIT_REDIS_KEY = 'token:limit:ks';

    /**
     * @var string 巨量redis起始key
     */
    public const OE_LIMIT_REDIS_KEY = 'token:limit:oe';

    /**
     * @var string 快手金牛redis起始key
     */
    public const KS_ESP_LIMIT_REDIS_KEY = 'token:limit:ksesp';

    public const OE_TOKEN = '_OE_TOKEN'; // 字节-巨量引擎

    public const OE_REFRESH = '_OE_REFRESH_TOKEN'; // 字节-巨量引擎

    public const KS_TOKEN = '_KSDL_TOKEN'; // 快手磁力引擎-代理

    public const KS_REFRESH = '_KSDL_REFRESH_TOKEN'; // 快手磁力引擎-代理

    public const KS_NORMAL_TOKEN = '_KS_TOKEN'; // 快手磁力引擎-服务商

    public const KS_NORMAL_REFRESH = '_KS_REFRESH_TOKEN'; // 快手磁力引擎-服务商

    public const QQ_TOKEN = '_QQ_TOKEN'; // 广点通-服务商

    public const QQ_REFRESH = '_QQ_REFRESH_TOKEN'; // 广点通-服务商

    public const QQ_API_TOKEN_FUND_COST = 'API_TOKEN_FUND_COST';   // 账户流水接口token队列

    public const QQ_API_TOKEN_DAILY_COST = 'API_TOKEN_DAILY_COST';   // 账户日报表接口token队列

    public const QQ_API_VIDEO_INFO = 'API_TOKEN_VIDEO_INFO';   // 视频信息接口token队列

    public const QQ_API_PIC_INFO = 'API_TOKEN_PIC_INFO';   // 图片信息接口token队列

    //    /**
    //     * @var array 广点通接口token频率队列
    //     */
    //    public const QQ_TOKEN_API_KEY_ARR = [
    //        self::QQ_API_TOKEN_FUND_COST => 'token:barrel:' . CommonEnum::QQ_MEDIA . ':fund_cost',
    //        self::QQ_API_TOKEN_DAILY_COST => 'token:barrel:' . CommonEnum::QQ_MEDIA . ':daily_cost',
    //    ];

    /**
     * @var array 广点通接口token频率队列
     */
    public const QQ_TOKEN_API_KEY_ARR = [
        self::QQ_API_TOKEN_FUND_COST => [
            'redis_key' => 'token:barrel:' . CommonEnum::QQ_MEDIA . ':fund_cost',
            'num' => 5,
        ],
        self::QQ_API_TOKEN_DAILY_COST => [
            'redis_key' => 'token:barrel:' . CommonEnum::QQ_MEDIA . ':daily_cost',
            'num' => 10,
        ],
        self::QQ_API_VIDEO_INFO => [
            'redis_key' => 'token:barrel:' . CommonEnum::QQ_MEDIA . ':video_info',
            'num' => 10,
        ],
        self::QQ_API_PIC_INFO => [
            'redis_key' => 'token:barrel:' . CommonEnum::QQ_MEDIA . ':pic_info',
            'num' => 10,
        ],
    ];

    /**
     * 获取token key.
     * @param int $mediaId 媒体id
     * @param int $tokenId token_id
     */
    public static function getTokenRedisKey(int $mediaId = 0, int $tokenId = 0): string
    {
        return sprintf(self::TOKEN_REDIS_KEY, $mediaId, $tokenId);
    }
}
